package v3.caretaker;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

import v3.memento.MementoV3;

public class GestionDefaireImpl implements GestionDefaire {
	
	public GestionDefaireImpl() {
		super();
		this._defairePile = new ArrayList<MementoV3>();
		this._refairePile = new Stack<>();
	}

	private List<MementoV3> _defairePile;
	
	private Stack<MementoV3> _refairePile;

	/**
	 * Consiste à rejouer une action déjà défaite.
	 * rejoue la premiere commande de la pile _refairePile 
	 */
	@Override
	public void refaire() {
		MementoV3 m = _refairePile.pop();
		_defairePile.add(m);
		m.getCommand().setMemento(m);
	}

	/**
	 * 
	 */
	@Override
	public void defaire() {
		int i = _defairePile.size() - 1;
		MementoV3 mem = _defairePile.get(i);
		_defairePile.remove(i);
		_refairePile.push(mem);
		for( MementoV3 m: _defairePile)
			m.getCommand().setMemento(m);
	}

	@Override
	public void sauvegarder(MementoV3 m) {
		_defairePile.add(m);
		_refairePile.clear();
	}

}
